/*
* #%L
* gitools-ui-app
* %%
* Copyright (C) 2013 Universitat Pompeu Fabra - Biomedical Genomics group
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
package org.gitools.ui.app.analysis.wizard;
import org.gitools.api.modulemap.IModuleMap;
import org.gitools.api.persistence.FileFormat;
import org.gitools.api.resource.IResourceFormat;
import org.gitools.matrix.FileFormats;
import org.gitools.ui.core.utils.DocumentChangeListener;
import org.gitools.ui.core.utils.FileChooserUtils;
import org.gitools.ui.platform.IconUtils;
import org.gitools.ui.platform.dialog.MessageStatus;
import org.gitools.ui.platform.icons.IconNames;
import org.gitools.ui.platform.settings.Settings;
import org.gitools.ui.platform.wizard.AbstractWizardPage;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
public class ModulesPage extends AbstractWizardPage {
private static final long serialVersionUID = -3938595143114651781L;
private static final FileFormat[] formats = new FileFormat[]{FileFormats.MODULES_2C_MAP, FileFormats.GENE_MATRIX, FileFormats.GENE_MATRIX_TRANSPOSED, FileFormats.DOUBLE_BINARY_MATRIX, FileFormats.MODULES_INDEXED_MAP};
private boolean emptyFileAllowed;
public ModulesPage() {
setTitle("Select modules");
setLogo(IconUtils.getImageIconResourceScaledByHeight(IconNames.LOGO_MODULES, 96));
initComponents();
emptyFileAllowed = false;
fileFormatCb.setModel(new DefaultComboBoxModel(formats));
fileFormatCb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
updateState();
}
});
filePath.getDocument().addDocumentListener(new DocumentChangeListener() {
@Override
protected void update(DocumentEvent e) {
updateState();
}
});
ItemListener il = new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
updateState();
}
};
minSizeEnableChk.addItemListener(il);
maxSizeEnableChk.addItemListener(il);
ActionListener al = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
updateState();
}
};
minSizeValueCb.addActionListener(al);
maxSizeValueCb.addActionListener(al);
}
@Override
public JComponent createControls() {
return this;
}
private void updateState() {
minSizeValueCb.setEnabled(minSizeEnableChk.isSelected());
maxSizeValueCb.setEnabled(maxSizeEnableChk.isSelected());
boolean completed = emptyFileAllowed || !filePath.getText().isEmpty();
setMessage(MessageStatus.INFO, "");
try {
Integer.parseInt(((String) maxSizeValueCb.getSelectedItem()));
} catch (NumberFormatException ex) {
setStatus(MessageStatus.ERROR);
setMessage("Invalid number for modules having more annotated rows filter");
completed = false;
}
try {
Integer.parseInt(((String) minSizeValueCb.getSelectedItem()));
} catch (NumberFormatException ex) {
setStatus(MessageStatus.ERROR);
setMessage("Invalid number for modules having less annotated rows filter");
completed = false;
}
String path = filePath.getText().trim().toLowerCase();
if (!path.isEmpty()) {
if (!getFileFormat().checkExtension(path)) {
setMessage(MessageStatus.WARN, "The file extension doesn't match the selected format");
}
}
setComplete(completed);
}
/**
* This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
minSizeEnableChk = new javax.swing.JCheckBox();
minSizeValueCb = new javax.swing.JComboBox();
jLabel1 = new javax.swing.JLabel();
fileFormatCb = new javax.swing.JComboBox();
jLabel2 = new javax.swing.JLabel();
filePath = new javax.swing.JTextField();
fileBrowseBtn = new javax.swing.JButton();
maxSizeEnableChk = new javax.swing.JCheckBox();
maxSizeValueCb = new javax.swing.JComboBox();
jLabel3 = new javax.swing.JLabel();
minSizeEnableChk.setSelected(true);
minSizeEnableChk.setText("Omit modules having less annotated rows than");
minSizeEnableChk.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
minSizeEnableChkItemStateChanged(evt);
}
});
minSizeValueCb.setEditable(true);
minSizeValueCb.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"0", "1", "20", "30", "50", "100"}));
minSizeValueCb.setSelectedIndex(2);
jLabel1.setText("File format");
fileFormatCb.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"Two columns mappings", "Binary data matrix"}));
jLabel2.setText("File");
fileBrowseBtn.setText("Browse...");
fileBrowseBtn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
fileBrowseBtnActionPerformed(evt);
}
});
maxSizeEnableChk.setText("Omit modules having more annotated rows than");
maxSizeValueCb.setEditable(true);
maxSizeValueCb.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"20", "30", "50", "100"}));
maxSizeValueCb.setEnabled(false);
jLabel3.setText("Filtering options:");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(fileFormatCb, 0, 455, Short.MAX_VALUE)
.addGap(26, 26, 26))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel3)
.addContainerGap(456, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(minSizeEnableChk, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(maxSizeEnableChk))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(minSizeValueCb, 0, 209, Short.MAX_VALUE)
.addComponent(maxSizeValueCb, 0, 209, Short.MAX_VALUE))
.addContainerGap())
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(filePath, javax.swing.GroupLayout.DEFAULT_SIZE, 454, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(fileBrowseBtn)
.addContainerGap())))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(23, 23, 23)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel2)
.addComponent(fileBrowseBtn)
.addComponent(filePath, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(fileFormatCb, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel1))
.addGap(18, 18, 18)
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(minSizeEnableChk)
.addComponent(minSizeValueCb, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(maxSizeValueCb, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(maxSizeEnableChk))
.addContainerGap(114, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
private void minSizeEnableChkItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_minSizeEnableChkItemStateChanged
minSizeValueCb.setEnabled(minSizeEnableChk.isSelected());
}//GEN-LAST:event_minSizeEnableChkItemStateChanged
private void fileBrowseBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileBrowseBtnActionPerformed
File selPath = FileChooserUtils.selectFile("Select file", Settings.get().getLastMapPath(), FileChooserUtils.MODE_OPEN).getFile();
if (selPath != null) {
setSelectedFile(selPath);
Settings.get().setLastMapPath(selPath.getParentFile().getAbsolutePath());
}
}//GEN-LAST:event_fileBrowseBtnActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton fileBrowseBtn;
private javax.swing.JComboBox fileFormatCb;
private javax.swing.JTextField filePath;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
public javax.swing.JCheckBox maxSizeEnableChk;
public javax.swing.JComboBox maxSizeValueCb;
public javax.swing.JCheckBox minSizeEnableChk;
public javax.swing.JComboBox minSizeValueCb;
// End of variables declaration//GEN-END:variables
FileFormat getFileFormat() {
return (FileFormat) fileFormatCb.getSelectedItem();
}
public IResourceFormat getFileResourceFormat() {
return ((FileFormat) fileFormatCb.getSelectedItem()).getFormat(IModuleMap.class);
}
public File getSelectedFile() {
String path = filePath.getText();
return path.isEmpty() ? null : new File(path);
}
public void setSelectedFile(File file) {
String fileName = file.getName();
for (FileFormat ff : formats) {
if (ff.checkExtension(fileName)) {
fileFormatCb.setSelectedItem(ff);
break;
}
}
filePath.setText(file.getAbsolutePath());
}
public int getMinSize() {
int value = Integer.parseInt(((String) minSizeValueCb.getSelectedItem()));
return minSizeEnableChk.isSelected() ? value : 0;
}
public void setMinSize(int size) {
minSizeValueCb.setSelectedItem(String.valueOf(size));
minSizeEnableChk.setSelected(size != 0);
}
public int getMaxSize() {
int value = Integer.parseInt(((String) maxSizeValueCb.getSelectedItem()));
return maxSizeEnableChk.isSelected() ? value : Integer.MAX_VALUE;
}
public void setMaxSize(int size) {
maxSizeValueCb.setSelectedItem(String.valueOf(size));
maxSizeEnableChk.setSelected(size != 0 && size != Integer.MAX_VALUE);
}
public void setEmptyFileAllowed(boolean allowed) {
emptyFileAllowed = allowed;
updateState();
}
}